/*  Copyright (s) 2019 深圳百问网科技有限公司
 *  All rights reserved
 * 
 * 文件名称：ring_buffer.h
 * 摘要：
 *  
 * 修改历史     版本号        Author       修改内容
 *--------------------------------------------------
 * 2021.8.21      v01         百问科技      创建文件
 *--------------------------------------------------
*/
#ifndef __RING_BUFFER_H
#define __RING_BUFFER_H


typedef struct
{
    unsigned char *buffer;    /* 缓冲区空间 */
    unsigned int len;         /* 缓冲区大小 */
    volatile unsigned int pW; /* 写地址 */
    volatile unsigned int pR; /* 读地址 */
} ring_buffer;

/*
 *  输入参数：dst_buf --> 指向目标缓冲区
 *  输出参数：无
 *  返回值：无
 *  函数作用：初始化缓冲区
*/
extern void ring_buffer_init(ring_buffer *dst_buf, unsigned char *buf, unsigned int buf_len);

/*
 *  输入参数：c --> 要写入的数据
 *            dst_buf --> 指向目标缓冲区
 *  输出参数：无
 *  返回值：无
 *  函数作用：向目标缓冲区写入一个字节的数据，如果缓冲区满了就丢掉此数据
*/
extern void ring_buffer_write(ring_buffer *dst_buf, unsigned char c);

/*
 *  输入参数：c --> 指向将读到的数据保存到内存中的地址
 *            dst_buf --> 指向目标缓冲区
 *  输出参数：无
 *  返回值：读到数据返回0，否则返回-1
 *  函数作用：从目标缓冲区读取一个字节的数据，如果缓冲区空了返回-1表明读取失败
*/
extern int ring_buffer_read(ring_buffer *dst_buf, unsigned char *c);

#endif /* __RING_BUFFER_H */

